let defaultRoute = [];
//路由树
let rootTable = new Map();

let onPage = null;

let currentRoutes = [];

let isDefault = false;

let route = {
    /**
     * 路由的加载
     * @param root ：加载的根节点
     * @param param ：参数
     */
    load(root, param) {
        //先创建
        create(root, param);
    }
};

/**
 * 创建路由
 * @param root
 * @param params
 */
function create(root, params) {
    initRootTree(root, params.rootPath, params.routeList);
}

/**
 * 创建路由的数据结构
 * 1:先加载完成顶级路由
 * @param root: 根节点
 * @param rootPath ： 根路径名
 * @param routeList ：路由列表
 */
function initRootTree(root, rootPath, routeList) {
    console.log("aaa")
    let this_routes = new Map();
    let parent = null;
    if (root == '#root') {
        //如果是根路由，则直接加入
        parent = null;
    } else {
        parent = onPage;
    }
    //循环加载
    $.each(routeList, function (index, item) {
        if (rootTable.get(item.page) == null) {
            let component = rootPath + "/" + item.component;
            let j = {
                page: item.page, component: component, default: item.default, root: root, parent: parent
            };
            rootTable.set(item.page, j);
            this_routes.set(item.page,j);
            onPage = item.page;
        }
    });
    //console.log(rootTable)
    //继续向下加载
    let hash = location.hash;
    this_routes.forEach(function (value, key, map) {
        if(hash == "" || isDefault){
            //如果第一次进入的时候，则需要标记上是不是默认的，否则到时候就会默认失败
            isDefault = true;
            //直接加载吧
            if(value.default){
                $(value.root).load(value.component);
                let hash = "#/" + value.page;
                location.hash = hash
            }

        }else {
            //加载虚拟的dom
            let page = hash.substring(hash.indexOf("/") + 1);
            if(page == value.page){
                //如果已经相等了，则加载，否则，需要
                //查找全路径，并且逆向加载
                setPage(value);
                console.log(currentRoutes);
                initPage();
            }else {
                //j继续向下寻找
                $("#root_temp").load(value.component);
            }
        }
    })
}

function setPage(value){
    if(value.parent != null){
       setPage(rootTable.get(value.parent));
    }
    currentRoutes.push(value);
}

function initPage() {
    let route = currentRoutes.shift();
    if(route != null){
        $(route.root).load(route.component,function () {
            initPage();
        })
    }

}



